\chapter{Interpretation of the requirements from the set B}

\section{Message passing}

\subsection*{Messages}
We are to implement message passing in our system. The messages go from exactly one process to another and can contain any kind of data, including the process id. We must provide a way for the process to distinguish between several types of messages.

\subsection*{Message queues}
Each process will have exactly one message queue. The size of this queue can be fixed to avoid using dynamic memory allocation.

\subsection*{Sending messages}
A process must be able to send a message to any other process, regardless of the current of the receiver. So, it is possible to send a message to a waiting process. The send is not blocking and the sender is warned somehow if the receiver queue is full and the message could not be passed to it. 

\subsection*{Receiving messages}
A process receives messages through its message queue. It must be able to get the type of a message and to understand the content. The receive operation is blocking, that is a process is block if it tries to get a message from an empty queue. It should also be possible to wait for a certain kind of message. Another requirement is that one can specify a maximal blocking time for a receive operation. If this time is exceeded, the process gets an error message and resumes.

\subsection*{Ring}
This is another user program that we have to write where $n$ processes send messages among them like on a ring, that is the process $i$ sends a message to the process $i+1$. This ring is however not complete since the last process does not send a message to the first process. 

\subsection*{Dining philosophers}
We are to implement a version of the dining philosophers using message passing as the synchronization tool instead of the semaphores we have been using before in the lab.

\section{Process supervision}

\subsection*{Provide process supervision}
A process can be the supervisor of one or more supervised processes. When supervised processes terminates either normally or abnormally, the supervisor is notified. The supervisor must be able to distinguish between normal or abnormal terminations. 

\subsection*{Process supervision}
We must include a user program using process supervision.  

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "main"
%%% End: 